
#pragma once
#include "framework.h"
/**********************************************
* SFW_String
***********************************************/
SFW_String::SFW_String()
:string()
{
}

/**********************************************
* SFW_String
***********************************************/
SFW_String::SFW_String(char* str)
	:string(str)
{
}

/**********************************************
* SFW_String
***********************************************/
SFW_String::SFW_String(string& str)
	:string(str)
{
}

/**********************************************
* sprintf
***********************************************/
SFW_String& SFW_String::sprintf(const char* fmt, ...)
{
	int strSize;
	int initBufSize = 8192;
	vector<char> buffer(initBufSize);

	va_list args;

	va_start(args, fmt);
	strSize = vsnprintf(&buffer[0], initBufSize, fmt, args);
	va_end(args);

	if(strSize >= 0 && strSize < initBufSize)
	{
		/* read OK */
		assign(&buffer[0], strSize);
		return *this;
	}

	else if(strSize < 0)
	{
		/* failure */
		assign("");
		return *this;
	}

	else
	{
		/* (real buffer size) > (read buffer size) */
		/* buffer resize, try again */
		buffer.resize(strSize + 1);
		va_start(args, fmt);
		strSize = vsnprintf(&buffer[0], strSize + 1, fmt, args);
		va_end(args);

		assign(&buffer[0], strSize);
		return *this;
	}
}

